home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d16
/
wsmooth.arc
/
WSMSRC.ARC
/
FILE.C
next >
Wrap
C/C++ Source or Header
|
1990-10-09
|
17KB
|
488 lines
// file.c RHS functions for the File pulldown menu selections
#include<windows.h>
#include<stdio.h>
#include"wsmooth.h"
#include"wsmooth2.h"
#include"filebuf.h"
#include<string.h>
#define WM_WSM_DLGPAINT (WM_USER+0x100)
extern HWND WinSmooth;
HANDLE hDlgBrush;
void InitSettings(HWND hDlg);
void ProcessHScroll(WORD wParam, LONG lParam);
BOOL ValidateSRate(HWND hDlg);
BOOL ValidatePixRows(HWND hDlg);
void od_UpdateListBox(HWND hDlg);
void od_ChangeDfExt(PSTR Ext, PSTR Name);
void od_SeparateFilePath(HWND hDlg, LPSTR lpDestPath,
LPSTR lpDestFileName, LPSTR lpSrcFileName);
void od_AddExtension(PSTR Name, PSTR Ext);
// About Box manager function
BOOL FAR PASCAL About(HWND hDlg, unsigned message, WORD wParam, LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
return (TRUE);
case WM_COMMAND:
if (wParam == IDOK || wParam == IDCANCEL)
{
EndDialog(hDlg, TRUE);
return (TRUE);
}
break;
}
return (FALSE);
}
extern HANDLE hOrgBrush;
extern SETTINGS settings;
static SETTINGS s;
static HWND hSrateScroll,hPixRowsScroll,hRedScroll,hGreenScroll,hBlueScroll;
static HDC hDC;
static short fRed = 0, fGreen = 0, fBlue = 0, bRed = 0xff, bGreen = 0xff,
bBlue = 0xff;
static unsigned foreground = 1;
static char text[50];
BOOL FAR PASCAL Settings(HWND hDlg, unsigned message, WORD wParam,
LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
InitSettings(hDlg);
return (TRUE);
case WM_PAINT: // if dialog is painted
PostMessage(hDlg, WM_WSM_DLGPAINT, 0, 0L);
return FALSE;
case WM_WSM_DLGPAINT:
SetBkMode(hDC,OPAQUE); // has to be OPAQUE for background color to show
SetTextColor(hDC, RGB(fRed,fGreen,fBlue));
SetBkColor(hDC, RGB(bRed,bGreen,bBlue));
TextOut(hDC,0,0,(LPSTR)text,strlen(text));
return TRUE;
case WM_VSCROLL: // handle changes to 2 scroll bars
{
HWND hsb;
char temp[10];
if(hsb = HIWORD(lParam))
{
if(hsb == hSrateScroll) // handle changes to rate scroll
{
if(wParam == SB_LINEDOWN && settings.Msecs > MINMSECS)
settings.Msecs--;
else if(wParam == SB_LINEUP && settings.Msecs < MAXMSECS)
settings.Msecs++;
sprintf(temp,"%4u",settings.Msecs);
SetDlgItemText(hDlg, IDC_EB_SRATE, temp);
}
if(hsb == hPixRowsScroll) // handle changes to row scroll
{
if(wParam == SB_LINEDOWN &&
settings.PixelRows > MINPIXELROWS)
settings.PixelRows--;
else if(wParam == SB_LINEUP &&
settings.PixelRows < MAXPIXELROWS)
settings.PixelRows++;
sprintf(temp,"%1u",settings.PixelRows);
SetDlgItemText(hDlg, IDC_EB_PIXROWS, temp);
}
}
}
return TRUE;
case WM_HSCROLL:
ProcessHScroll(wParam, lParam);
return TRUE;
case WM_COMMAND:
switch(wParam)
{
case IDC_RB_FG: // foreground/background switch
case IDC_RB_BG:
foreground = (wParam == IDC_RB_FG) ? TRUE : FALSE;
SendMessage(GetDlgItem(hDlg,IDC_RB_FG),BM_SETCHECK,
foreground,0L);
SendMessage(GetDlgItem(hDlg,IDC_RB_BG),BM_SETCHECK,
!foreground,0L);
SetScrollPos(hRedScroll,SB_CTL,(foreground ? fRed : bRed),
TRUE);
SetScrollPos(hGreenScroll,SB_CTL,
(foreground ? fGreen : bGreen),TRUE);
SetScrollPos(hBlueScroll,SB_CTL,
(foreground ? fBlue : bBlue),TRUE);
break;
case IDC_CB_STRIP:
settings.stripbits = !settings.stripbits;
break;
case IDC_BU_SAVE: // save settings
{
char buf[20];
if(!ValidateSRate(hDlg))
break;
if(!ValidatePixRows(hDlg))
break;
SendMessage(WinSmooth,WM_WSM_HOURGLASS_CURSOR,0,0L);
settings.back = RGB(bRed,bGreen,bBlue);
settings.fore = RGB(fRed,fGreen,fBlue);
sprintf(buf,"%d",settings.Msecs);
WriteProfileString((LPSTR)"WinSmooth",(LPSTR)"Msecs",(LPSTR)buf);
sprintf(buf,"%d",settings.PixelRows);
WriteProfileString((LPSTR)"WinSmooth",(LPSTR)"PixelRows",(LPSTR)buf);
sprintf(buf,"%lu",settings.back);
WriteProfileString((LPSTR)"WinSmooth",(LPSTR)"BackGround",(LPSTR)buf);
sprintf(buf,"%lu",settings.fore);
WriteProfileString((LPSTR)"WinSmooth",(LPSTR)"ForeGround",(LPSTR)buf);
sprintf(buf,"%d",settings.stripbits);
WriteProfileString((LPSTR)"WinSmooth",(LPSTR)"StripBits",(LPSTR)buf);
SendMessage(WinSmooth,WM_WSM_NORMAL_CURSOR,0,0L);
}
break;
case IDCANCEL:
settings = s; // structure assign to restore settings
case IDOK: // save current settings
if(wParam == IDOK) // save to WIN.INI
{
HDC h;
if(!ValidateSRate(hDlg))
break;
if(!ValidatePixRows(hDlg))
break;
h = GetDC(WinSmooth);
settings.back = RGB(bRed,bGreen,bBlue);
settings.fore = RGB(fRed,fGreen,fBlue);
ResetBackGround(h);
settings.stripbits = (SendMessage(
GetDlgItem(hDlg,IDC_CB_STRIP),
BM_GETCHECK, 0, 0L) ? TRUE: FALSE);
filebuf_strip(settings.stripbits);
ReleaseDC(WinSmooth,h);
InvalidateRect(WinSmooth,NULL,TRUE);
}
// code common to OK and CANCEL
DeleteObject(hDlgBrush);
ReleaseDC(hDlg, hDC);
EndDialog(hDlg, TRUE);
return (TRUE);
default:
break;
}
break;
}
return (FALSE);
}
// initialize Settings dialog
void InitSettings(HWND hDlg)
{
HWND hwnd;
char temp[10];
s = settings; // structure assign to save settings
// initialize the edit boxes
sprintf(temp,"%4u",settings.Msecs);
SetDlgItemText(hDlg, IDC_EB_SRATE, temp);
sprintf(temp,"%1u",settings.PixelRows);
SetDlgItemText(hDlg, IDC_EB_PIXROWS, temp);
// get the horz scroll handles
hSrateScroll = GetDlgItem(hDlg, IDC_SB_SRATE);
hPixRowsScroll = GetDlgItem(hDlg, IDC_SB_PIXROWS);
hRedScroll = GetDlgItem(hDlg, IDC_SB_RED);
hGreenScroll = GetDlgItem(hDlg, IDC_SB_GREEN);
hBlueScroll = GetDlgItem(hDlg, IDC_SB_BLUE);
// set the scroll bar ranges
SetScrollRange(hSrateScroll,SB_CTL,MINMSECS,MAXMSECS,TRUE);
SetScrollRange(hPixRowsScroll,SB_CTL,MINPIXELROWS,MAXPIXELROWS,TRUE);
SetScrollRange(hRedScroll,SB_CTL,0,255,TRUE);
SetScrollRange(hGreenScroll,SB_CTL,0,255,TRUE);
SetScrollRange(hBlueScroll,SB_CTL,0,255,TRUE);
// and color scroll bar positions
fRed = GetRValue(settings.fore);
fGreen = GetGValue(settings.fore);
fBlue = GetBValue(settings.fore);
bRed = GetRValue(settings.back);
bGreen = GetGValue(settings.back);
bBlue = GetBValue(settings.back);
SetScrollPos(hRedScroll,SB_CTL,(foreground ? fRed : bRed),TRUE);
SetScrollPos(hGreenScroll,SB_CTL,(foreground ? fGreen : bGreen),TRUE);
SetScrollPos(hBlueScroll,SB_CTL,(foreground ? fBlue : bBlue),TRUE);
// and color of sample text
hDC = GetDC(hwnd = GetDlgItem(hDlg,IDC_EB_COLOR));
GetDlgItemText(hDlg,IDC_EB_COLOR,(LPSTR)text,sizeof(text)-1);
{
HANDLE hOldBrush;
hDlgBrush = CreateSolidBrush(settings.back);
hOldBrush = SelectObject(hDC,hDlgBrush);
DeleteObject(hOldBrush);
SetClassWord(hwnd,GCW_HBRBACKGROUND,hDlgBrush);
}
SetBkMode(hDC,OPAQUE); // has to be OPAQUE for background color to show
// check/uncheck the check box
SendMessage(GetDlgItem(hDlg,IDC_CB_STRIP),BM_SETCHECK,settings.stripbits,0L);
// check the foreground radio button
SendMessage(GetDlgItem(hDlg,IDC_RB_FG),BM_SETCHECK,foreground,0L);
// uncheck the background
SendMessage(GetDlgItem(hDlg,IDC_RB_BG),BM_SETCHECK,!foreground,0L);
// limit scrolling rate box to 4 chars
SendMessage(GetDlgItem(hDlg,IDC_EB_SRATE),EM_LIMITTEXT,4,0L);
// limit pixel rows box to 1 char
SendMessage(GetDlgItem(hDlg,IDC_EB_PIXROWS),EM_LIMITTEXT,1,0L);
}
// processes color-setting horizontal scroll bars
void ProcessHScroll(WORD wParam, LONG lParam)
{
HWND hsb;
short *color;
hsb = HIWORD(lParam);
if(hsb == hRedScroll)
color = (foreground ? &fRed : &bRed);
if(hsb == hGreenScroll)
color = (foreground ? &fGreen : &bGreen);
if(hsb == hBlueScroll)
color = (foreground ? &fBlue : &bBlue);
switch(wParam)
{
case SB_PAGEDOWN:
*color += 15; // fall thru
case SB_LINEDOWN:
*color = min(255,*color+1);
break;
case SB_PAGEUP:
*color -= 15; // fall thru
case SB_LINEUP:
*color = max(0, *color-1);
break;
case SB_TOP:
*color = 0;
break;
case SB_BOTTOM:
*color = 255;
break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
*color = LOWORD(lParam);
default:
break;
}
SetScrollPos(hsb,SB_CTL,*color,TRUE);
SetBkMode(hDC,OPAQUE); // has to be OPAQUE for background color to show
SetTextColor(hDC, RGB(fRed,fGreen,fBlue));
SetBkColor(hDC, RGB(bRed,bGreen,bBlue));
TextOut(hDC,0,0,(LPSTR)text,strlen(text));
}
BOOL ValidateSRate(HWND hDlg)
{
int newrate;
BOOL flag;
newrate = GetDlgItemInt(hDlg, IDC_EB_SRATE,(BOOL far *)&flag,0);
if(!flag || (newrate < MINMSECS) || (newrate > MAXMSECS))
{
Message(WinSmooth,"Scrolling rate must be a value between %u and %u.",
MINMSECS,MAXMSECS);
SendDlgItemMessage(hDlg, IDC_EB_SRATE, EM_UNDO, 0, 0L);
return FALSE;
}
settings.Msecs = newrate;
return TRUE;
}
BOOL ValidatePixRows(HWND hDlg)
{
int newrate;
BOOL flag;
newrate = GetDlgItemInt(hDlg, IDC_EB_PIXROWS,(BOOL far *)&flag,0);
if(!flag || (newrate < MINPIXELROWS) || (newrate > MAXPIXELROWS))
{
Message(WinSmooth,"Number of pixel rows scrolled must be a value between %u and %u.",
MINPIXELROWS,MAXPIXELROWS);
SendDlgItemMessage(hDlg, IDC_EB_PIXROWS, EM_UNDO, 0, 0L);
return FALSE;
}
settings.PixelRows = newrate;
return TRUE;
}
char od_filename[128];
char od_openname[128];
char od_defpath[128];
char od_defspec[13] = "*.txt";
char od_default_extension[] = ".txt";
char str[255];
// lets user select and open files
HANDLE FAR PASCAL OpenDlg(HWND hDlg, unsigned message, WORD wParam,
LONG lParam)
{
BOOL result;
switch (message)
{
case WM_INITDIALOG: // message: initialize
od_UpdateListBox(hDlg);
SetDlgItemText(hDlg, IDC_EDIT, od_defspec);
SendDlgItemMessage(hDlg,IDC_EDIT,EM_SETSEL,NULL,
MAKELONG(0, 0x7fff));
SetFocus(GetDlgItem(hDlg, IDC_EDIT));
return (FALSE); // Indicates the focus is set to a control
break;
case WM_COMMAND:
switch (wParam)
{
case IDC_LISTBOX:
switch (HIWORD(lParam))
{
case LBN_SELCHANGE:
// If item is a directory name, append "*.*"
if (DlgDirSelect(hDlg, str, IDC_LISTBOX))
strcat(str, od_defspec);
SetDlgItemText(hDlg, IDC_EDIT, str);
SendDlgItemMessage(hDlg,IDC_EDIT,EM_SETSEL,NULL,MAKELONG(0, 0x7fff));
break;
case LBN_DBLCLK:
goto openfile;
}
return (TRUE);
break;
case IDOK:
openfile:
GetDlgItemText(hDlg, IDC_EDIT, od_openname, 128);
if (strchr(od_openname, '*') || strchr(od_openname, '?'))
{
od_SeparateFilePath(hDlg, (LPSTR) str, (LPSTR) od_defspec,
(LPSTR) od_openname);
if (str[0])
strcpy(od_defpath, str);
od_ChangeDfExt(od_default_extension, od_defspec);
od_UpdateListBox(hDlg);
return (TRUE);
}
if (!od_openname[0])
{
MessageBox(hDlg, "No filename specified.",
NULL, MB_OK | MB_ICONHAND);
return (TRUE);
}
od_AddExtension(od_openname, od_default_extension);
// open the file
result = WSopenfile(od_openname);
strcpy(od_filename, od_openname);
EndDialog(hDlg, result);
return (TRUE);
case IDCANCEL:
EndDialog(hDlg, FALSE);
return (TRUE);
}
}
return FALSE;
}
// updates the list box in the Open Dialog
void od_UpdateListBox(HWND hDlg)
{
strcpy(str, od_defpath);
strcat(str, od_defspec);
DlgDirList(hDlg, str, IDC_LISTBOX, IDC_PATH, 0x4010);
// list is for subdir of current drive directory
if (!strchr (od_defpath, ':'))
DlgDirList(hDlg, od_defspec, IDC_LISTBOX, IDC_PATH, 0x4010);
// remove the '..', if one
if (strstr (od_defpath, ".."))
od_defpath[0] = '\0';
SetDlgItemText(hDlg, IDC_EDIT, od_defspec);
}
// changes default extension
void od_ChangeDfExt(PSTR Ext, PSTR Name)
{
PSTR pTptr;
pTptr = Name;
while (*pTptr && *pTptr != '.')
pTptr++;
if (*pTptr)
if (!strchr(pTptr, '*') && !strchr(pTptr, '?'))
strcpy(Ext, pTptr);
}
// separates file and path names
void od_SeparateFilePath(HWND hDlg, LPSTR lpDestPath,
LPSTR lpDestFileName, LPSTR lpSrcFileName)
{
LPSTR lpTmp;
char cTmp;
lpTmp = lpSrcFileName + (long) lstrlen(lpSrcFileName);
while (*lpTmp != ':' && *lpTmp != '\\' && lpTmp > lpSrcFileName)
lpTmp = AnsiPrev(lpSrcFileName, lpTmp);
if (*lpTmp != ':' && *lpTmp != '\\') {
lstrcpy(lpDestFileName, lpSrcFileName);
lpDestPath[0] = 0;
return;
}
lstrcpy(lpDestFileName, lpTmp + 1);
cTmp = *(lpTmp + 1);
lstrcpy(lpDestPath, lpSrcFileName);
*(lpTmp + 1) = cTmp;
lpDestPath[(lpTmp - lpSrcFileName) + 1] = 0;
}
// adds default extension
void od_AddExtension(PSTR Name, PSTR Ext)
{
PSTR pTptr;
pTptr = Name;
while (*pTptr && *pTptr != '.')
pTptr++;
if (*pTptr != '.')
strcat(Name, Ext);
}